package co.edu.uniquindio.dao;

import java.util.Date;
import java.util.List;
import java.util.Vector;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.Query;

import co.edu.uniquindio.dto.ConsultaDTO;
import co.edu.uniquindio.logica.Automovil;
import co.edu.uniquindio.logica.Vendedor;

/**
 * Dao implementation class for Dao: AutomovilDao
 * esta Dao me permite hacer todo el manejo con la BD
 * de la informacion concernientes a un automovil
 * @author Andres Felipe Abril
 * @author Luis Enrique Robledo
 */

@Stateless
@LocalBean
public class AutomovilDao extends Dao<Automovil, String> {

	/**
	 * contructor por defecto de la clase AutomovilDao 
	 */
	public AutomovilDao() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * Metodo para obtener la entidad de automovil
	 * @return Entity de automovil
	 */
	@Override
	protected Class<Automovil> getEntityClass() {
		// TODO Auto-generated method stub
		return Automovil.class;
	}

	/**
	 * este metodo me permite obtener los autos asociados a un vendedor
	 * @param el vendedor
	 * @return una lista con los automoviles asociados a ese vendedor
	 */
	public List<Automovil> obtenerAutosVendedor(Vendedor vendedor)
	{
		Query query = entityManager.createQuery("select automovil from Automovil automovil where automovil.vendedor=:vendedor" );
		query.setParameter("vendedor", vendedor);
		query = query.setFirstResult(1);
		@SuppressWarnings("unchecked")
		List<Automovil> automoviles = query.getResultList();
		return automoviles;
	}
	/**
	 * este metodo me permite obtener un listado de vectores asociados a el color y motor
	 * @param un pais
	 * @return una lista con un vector de objetos siendo cada vector el resultado que la consulta arroja de
	 * un registro en la tabla de la BD 
	 */
	public List<Vector<Object>> algo(String pais)
	{
		Query query = entityManager.createQuery("select automovil.color,automovil.motor from Automovil	automovil where automovil.vendedor.pais.nombre=:pais" );
		query.setParameter("pais", pais);
		@SuppressWarnings("unchecked")
		List<Vector<Object>> lista =query.getResultList();
		return lista;

	}
	/**
	 * Metodo para consultar en base de datos los valores de placa y color de un automovil
	 * @return retorna una lista con DTOs teniendo cada uno de
	 * los DTOs los valores resultantes de la cansulta
	 */
	@SuppressWarnings("unchecked")
	public List<ConsultaDTO> consultaDto()
	{
		Query query = entityManager.createQuery("select  new co.edu.uniquindio.dto.ConsultaDTO(automovil.numeroPlaca,automovil.color)from Automovil automovil" );
		return query.getResultList();   
	}

	public List<Automovil> buscarPorAnio(Date fecha)
	{
		//TODO: revisar esta consulta

		return null;
	}
}
